# coding=utf-8

##############################################################################
#
# macitunesfeeder.py
# A class to feed iTunes recent album / artist
# Depending to appscript : http://appscript.sourceforge.net/
#
# Copyright (c) 2007 Webcore Corp. All Rights Reserved.
#
##############################################################################
""" macitunesfeeder.py - A class to feed iTunes recent album / artist

$Id: macitunesfeeder.py 5 2007-05-06 12:54:22Z shib.ats $
"""

__author__  = 'Atsushi Shibata <shibata@webcore.co.jp>'
__docformat__ = 'plaintext'
__licence__ = 'MIT'

import logging
from datetime import datetime

from utilities import exp2log, nifty_formatter, make_unique_id
from pluginbase import BaseFeeder

__all__ = ('MaciTunesFeeder',)

class MaciTunesFeeder(BaseFeeder):
    """
    iTunesで再生中のアルバムをfeedするクラス
    appscriptに依存
    http://appscript.sourceforge.net/
    """
    def __init__(self, d):
        """
        Feederの初期化method
        設定値を辞書で引数dに渡す
        
        設定値は以下:

        template : タイトルを生成するためのテンプレート
                   trackという辞書のキーを埋め込む，
                   デフォルトはアルバム名，アーチスト名のみを埋め込む

                   使えるキーは以下
                   album  : アルバム名
                   artist : アーチスト名
                   rating : レーティング
                   count  : 再生回数
        
        """
        self.id = d['id']
        self.template = d.get('template', """%(album)s / %(artist)s""")

    def feed(self, settings):
        """
        feedを行うmethod
        id, title, updatedのみを返す
        """
        from appscript import app
        
        items = []
        try:
            # iTunesから再生中のアルパム情報を得る
            aobj = app('iTunes')
            ct = aobj.current_track()
            track = {'album':ct.album(),
                     'artist':ct.artist(),
                     'rating':ct.rating(),
                     'count':ct.played_count()
                     }
            # 新しいアルパムかどうかを判別する
            a_n = """%(album)s:%(artist)s""" % track
            if settings.get('ratest_track','') != a_n:
                settings['ratest_track'] = a_n
                items = [{'id':make_unique_id(settings, self.id),
                          'title':self.template % track,
                          'updated':datetime.now()
                         }]
                logout = nifty_formatter(items[0])
                logging.debug("""%s : reading an feed item:\n%s""" % 
                                (self.__class__.__name__, logout))
        except:
            exp2log(logging.error)
        return items

